package view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;

import model.LibriImpl;
import statistiche.StatisticaCliente;
import utilities.BibliotecaJDBC;
import utilities.JImage;
import utilities.JPanel2;
import utilities.JTable2;
import controller.ControllerAdminImpl;

public class AdminView extends JFrame {
	/**
* 
*/
	private static final long serialVersionUID = 1L;
	private int numCopie = 0;
	private MainView mv;
	private Connection conn = BibliotecaJDBC.getConnection();
	private Dimension dimensioneAdmin = new Dimension(1366, 730);
	private Dimension dimensioniFinestre = new Dimension(900, 750);
	private Point centroAssi = new Point(
			((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() - dimensioneAdmin.width) / 2,
			((int) Toolkit.getDefaultToolkit().getScreenSize().getHeight() - dimensioneAdmin.height) / 2);
	private Point centroAssi2 = new Point(
			((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() - dimensioniFinestre.width) / 2,
			((int) Toolkit.getDefaultToolkit().getScreenSize().getHeight() - dimensioniFinestre.height) / 2);
	private ControllerAdminImpl controller;
	private Cursor cursore = new Cursor(Cursor.HAND_CURSOR);

	private Font font1 = new Font("Comic san MS", Font.ITALIC, 30);
	private Font font2 = new Font("Comic san MS", Font.BOLD, 15);
	private ImageIcon sfondo = new ImageIcon("immagini/sfondogrande.jpg");
	private ImageIcon sfondoNormale = new ImageIcon("immagini/sfondo1.jpg");
	private ImageIcon erroreIm = new ImageIcon("immagini/bookerror.png");
	private ImageIcon puntoInterrogativo = new ImageIcon(
			"immagini/puntoInterrogativo.gif");
	private ImageIcon okIm = new ImageIcon("immagini/libro.png");
	private Dimension dimensioneUtente = new Dimension(900, 650);
	private ListenerAdminView listenerBottoni = new ListenerAdminView();
	private JTextField titoloAggiungiLibro, genereAggiungiLibro,
			idCercaCliente, nomeCercaCliente, cognomeCercaCliente,
			emailCercaCliente, idPrestito, isbnPrestito, autoreAggiungiLibro,
			isbnAggiungiLibro, casaEditriceAggiungiLibro,
			numeroCopieAggiungiLibro, scaffale, isbnRestituzione,
			idRestituzione, titoloCercaLibro, autoreCercaLibro,
			casaEditriceCercaLibro, genereCercaLibro, nomeAggiungiCliente,
			cognomeAggiungiCliente, emailAggiungiCliente, urlCopertina;
	private JButton avantiPrestito, indietroPrestito, cercaLibro,
			aggiungiLibro, cercaCliente, aggiungiCliente, help, logOut,
			indietroInCercaLibro, avantiAggiungiLibro, indietroAggiungiLibro,
			prestitoCliente, restituzioneCliente, avantiCercaLibro,
			indietroCercaLibro, indietroInCercaCliente, avantiAggiungiCliente,
			indietroAggiungiCliente, avantiRestituzione, indietroRestituzione,
			aggiungiCopertinaLibro, avantiCercaCliente, indietroCercaCliente,
			storico, invioSegnalazione;
	private JFrame frameCercaLibro, frameAggiungiCliente, jfCercaLibro,
			jfCercaCliente, framePrestito, frameRestituzione,
			frameAggiungiLibro, frameCercaCliente, frameStoricoCliente,
			clienteInserito;

	private JPanel2 pannelloStatistiche;
	private JMenuBar menuBar;
	private JMenu statisticheDisponibili, visualizzaStorico;
	private JMenuItem menuHelp, menuIndietro, statisticaGeneriPreferiti,
			piuDatati, menoDatati, stessoGenere, statisticaMensile,
			statisticaAnnuale, stessaCasaEditrice, menuClientiInRitardo;
	private StatisticaCliente statistiche;
	private JFrame frameCopie;
	private JButton indietroNumCopie;
	JComboBox<Integer> listaNumLibri;

	public AdminView(MainView mv, ControllerAdminImpl controller) {
		this.mv = mv;
		this.controller = controller;
		inizializzaFinestra();
		statistiche = new StatisticaCliente(conn, mv.getIdAccesso());
		pack();
	}

	private class KeyListenerView implements KeyListener {
		@Override
		public void keyTyped(KeyEvent e) {
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				int option = JOptionPane.showConfirmDialog(null,
						"Sicuro di voler uscire?", "Exit Message",
						JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION,
						puntoInterrogativo);
				if (option == JOptionPane.YES_OPTION) {
					AdminView.this.setVisible(false);
					mv.rendiVisibile();
				}
			}
		}

	}

	private class ListenerAdminView implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == cercaLibro) {
				apriCercaLibro();
			} else if (e.getSource() == aggiungiCliente) {
				apriAggiungiCliente();
			} else if (e.getSource() == avantiAggiungiCliente) {
				apriFinestraAggiungiCliente();
			} else if (e.getSource() == indietroAggiungiCliente) {
				frameAggiungiCliente.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == aggiungiLibro) {
				apriAggiungiLibro();
			} else if (e.getSource() == prestitoCliente) {
				apriPrestitoCliente();
			} else if (e.getSource() == avantiPrestito) {
				try {
					int idCliente = Integer.parseInt(idPrestito.getText());
					long isbn = Long.parseLong(isbnPrestito.getText());
					controller.prendiLibro(idCliente, isbn);
				} catch (NumberFormatException ex) {
					parametriScorretti();
				}
			} else if (e.getSource() == indietroPrestito) {
				framePrestito.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == restituzioneCliente) {
				apriRestituzioneLibro();
			} else if (e.getSource() == avantiRestituzione) {
				try {
					int idCliente = Integer.parseInt(idRestituzione.getText());
					long isbn = Long.parseLong(isbnRestituzione.getText());
					controller.restituisciLibro(idCliente, isbn);
				} catch (NumberFormatException ex) {
					parametriScorretti();
				}
			} else if (e.getSource() == indietroRestituzione) {
				frameRestituzione.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == avantiCercaLibro) {
				apriFinestraCercaLibro();
			} else if (e.getSource() == indietroCercaLibro) {
				frameCercaLibro.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == indietroInCercaLibro) {
				jfCercaLibro.dispose();// c'era jf.setVisible(false)
			} else if (e.getSource() == avantiAggiungiLibro) {
				apriFinestraAggiungiLibro();
			} else if (e.getSource() == indietroAggiungiLibro) {
				frameAggiungiLibro.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == logOut) {
				int option = JOptionPane.showConfirmDialog(null,
						"Sicuro di voler uscire?", "Exit Message",
						JOptionPane.YES_NO_OPTION, JOptionPane.YES_NO_OPTION,
						puntoInterrogativo);
				if (option == JOptionPane.YES_OPTION) {
					AdminView.this.setVisible(false);
					controller.chiudiConnessione();
					mv.rendiVisibile();
				}

			} else if (e.getSource() == cercaCliente) {
				apriCercaCliente();
			} else if (e.getSource() == avantiCercaCliente) {
				apriFinestraCercaCliente();
			} else if (e.getSource() == indietroCercaCliente) {
				frameCercaCliente.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == indietroInCercaCliente) {
				jfCercaCliente.dispose();
			} else if (e.getSource() == storico) {
				AdminView.this.setVisible(false);
				apriStorico();
			} else if (e.getSource() == statisticaAnnuale) {
				apriStatisticaAnnuale();
			} else if (e.getSource() == statisticaMensile) {
				apriStatisticaMensile();
			} else if (e.getSource() == statisticaGeneriPreferiti) {
				apriStatisticaGeneri();
			} else if (e.getSource() == menuIndietro) {
				frameStoricoCliente.dispose();
				AdminView.this.setVisible(true);
			} else if (e.getSource() == piuDatati) {
				apriPiuDatati();
			} else if (e.getSource() == menuClientiInRitardo) {
				apriClientiInRitardo();
			} else if (e.getSource() == menoDatati) {
				apriMenoDatati();
			} else if (e.getSource() == listaNumLibri) {
				numCopie = listaNumLibri.getSelectedIndex();
				frameCopie.dispose();
				apriPiuPresi(numCopie + 1);
			}

			/*
			 * else if(e.getSource()== avantiNumCopie) { try{
			 * 
			 * numCopie = Integer.parseInt(copie.getText());
			 * apriPiuPresi(numCopie); } catch (NumberFormatException ex) {
			 * parametriScorretti(); } }
			 */
			else if (e.getSource() == indietroNumCopie) {
				frameCopie.dispose();
				AdminView.this.setVisible(true);

			} else if (e.getSource() == menuHelp) {
				JOptionPane
						.showMessageDialog(
								null,
								"Naviga nello storico della Biblioteca Unical  \n Puoi visualizzare i grafici dei presititi effettuati nell'ordine che preferisci \n Vedere i libri presi in prestito in ordine alfabetico rispetto al genere o alla casa editrice.\n Buona navigazione!!!",
								null, JOptionPane.ERROR_MESSAGE, erroreIm);
			} else if (e.getSource() == stessaCasaEditrice) {
				apriStessaCasaEditrice();
			} else if (e.getSource() == stessoGenere) {
				apriStessoGenere();
			} else if (e.getSource() == aggiungiCopertinaLibro) {
				apriChooser();
			} else if (e.getSource() == invioSegnalazione) {
				inviaSegnalazione();
			} else if (e.getSource() == help) {
				JOptionPane
						.showMessageDialog(
								null,
								"I servizi a tua disposizione sono : \n 1)Aggiungere clienti  \n 2)Cercare i clienti registrati nella biblioteca \n 3) Aggiungere i libri che preferisci \n 4)Cercare tutti i libri a disposizione della biblioteca \n 5)Far prendere ad un cliente un massimo di 5 libri diversi tra loro \n 6)Far restituire ai cliente un libro preso precedentemente in prestito \n 7) Visualizzare  grafici relativi al numero di clienti che hanno preso libri in biblioteca,ordinare gli stessi come si preferisce \n ed avere una lista di tutti i clienti in ritardo nella restituzione dei prestiti \n 8) Mandare una email di promemoria ai clienti ai quali sta scadendo il prestito \n Buon Divertimento!!",

								null, JOptionPane.ERROR_MESSAGE, erroreIm);
			}
		}

	}

	private class KeyListenerCopieDaVisualizzare implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameCopie.dispose();
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}

	}

	private class KeyListenerStatistiche implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameStoricoCliente.dispose();
				AdminView.this.setVisible(true);
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}

	}

	private class KeyListenerAggiungiCliente implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameAggiungiCliente.dispose();
				AdminView.this.setVisible(true);
			} else if (key == KeyEvent.VK_ENTER) {
				apriFinestraAggiungiCliente();
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}
	}

	private class KeyListenerCercaCliente implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameCercaCliente.dispose();
				AdminView.this.setVisible(true);
			} else if (key == KeyEvent.VK_ENTER) {
				apriFinestraCercaCliente();
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}

	}

	private class KeyListenerCercaLibro implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameCercaLibro.dispose();
				AdminView.this.setVisible(true);
			} else if (key == KeyEvent.VK_ENTER) {
				apriFinestraCercaLibro();
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}

	}

	private class KeyListenerAggiungiLibro implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameAggiungiLibro.dispose();
				AdminView.this.setVisible(true);
			} else if (key == KeyEvent.VK_ENTER) {
				apriFinestraAggiungiLibro();
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}

	}

	private class KeyListenerPrestitoLibro implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				framePrestito.dispose();
				AdminView.this.setVisible(true);
			} else if (key == KeyEvent.VK_ENTER) {
				try {

					int idCliente = Integer.parseInt(idPrestito.getText());
					long isbn = Long.parseLong(isbnPrestito.getText());
					controller.prendiLibro(idCliente, isbn);
				} catch (NumberFormatException ex) {
					parametriScorretti();

				}
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent e) {
		}

	}

	private class KeyListenerRestituisciLibro implements KeyListener {

		@Override
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == KeyEvent.VK_ESCAPE) {
				frameRestituzione.dispose();
				AdminView.this.setVisible(true);
			} else if (key == KeyEvent.VK_ENTER) {
				try {
					int idCliente = Integer.parseInt(idRestituzione.getText());
					long isbn = Long.parseLong(isbnRestituzione.getText());
					controller.restituisciLibro(idCliente, isbn);
				} catch (NumberFormatException ex) {
					parametriScorretti();
				}
			}
		}

		@Override
		public void keyReleased(KeyEvent e) {
		}

		@Override
		public void keyTyped(KeyEvent arg0) {
			//

		}

	}

	private void inizializzaFinestra() {
		this.setTitle("Biblioteca");
		this.setSize(new Dimension(1366, 730));
		this.setPreferredSize(dimensioneAdmin);
		this.setVisible(true);
		this.setResizable(false);
		this.setFocusable(true);
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

		// pannelli
		JPanel pannelloMain = new JPanel2(sfondo.getImage());
		pannelloMain.setLayout(new GridLayout(4, 8));
		this.add(pannelloMain);

		// vari bottoni
		ImageIcon iconClienteAggiungi = new ImageIcon(
				"immagini/aggiungiCliente.png");
		ImageIcon iconClienteCerca = new ImageIcon("immagini/cercaCliente.png");
		ImageIcon iconAggiungiLibro = new ImageIcon(
				"immagini/aggiungi libro.png");
		ImageIcon iconStorico = new ImageIcon("immagini/storico.png");
		ImageIcon iconPrestito = new ImageIcon("immagini/libriUscita.png");
		ImageIcon iconRestituzione = new ImageIcon("immagini/libriEntrata.png");
		ImageIcon iconCercaLibro = new ImageIcon("immagini/cercaLibro.png");
		ImageIcon iconHelp = new ImageIcon("immagini/help.png");
		ImageIcon iconLogOut = new ImageIcon("immagini/logout.gif");
		ImageIcon iconSegnalazione = new ImageIcon(
				"immagini/inviaSegnalazione.png");
		restituzioneCliente = new JButton(iconRestituzione);
		storico = new JButton(iconStorico);
		prestitoCliente = new JButton(iconPrestito);
		aggiungiCliente = new JButton(iconClienteAggiungi);
		invioSegnalazione = new JButton(iconSegnalazione);
		cercaCliente = new JButton(iconClienteCerca);
		aggiungiLibro = new JButton(iconAggiungiLibro);
		logOut = new JButton(iconLogOut);
		cercaLibro = new JButton(iconCercaLibro);
		help = new JButton(iconHelp);

		restituzioneCliente.setCursor(cursore);
		storico.setCursor(cursore);
		prestitoCliente.setCursor(cursore);
		aggiungiCliente.setCursor(cursore);
		invioSegnalazione.setCursor(cursore);
		cercaCliente.setCursor(cursore);
		aggiungiLibro.setCursor(cursore);
		logOut.setCursor(cursore);
		cercaLibro.setCursor(cursore);
		help.setCursor(cursore);

		JButton n = new JButton();
		JButton n1 = new JButton();
		JButton n2 = new JButton();
		JButton n3 = new JButton();
		JButton n4 = new JButton();
		JButton n5 = new JButton();
		JButton n6 = new JButton();
		JButton n7 = new JButton();
		JButton n8 = new JButton();
		JButton n9 = new JButton();
		JButton n10 = new JButton();
		JButton n11 = new JButton();
		JButton n12 = new JButton();
		JButton n13 = new JButton();
		JButton n14 = new JButton();
		JButton n15 = new JButton();
		JButton n17 = new JButton();
		JButton n18 = new JButton();
		JButton n19 = new JButton();
		JButton n20 = new JButton();
		JButton n21 = new JButton();
		JButton n22 = new JButton();

		n.setVisible(false);
		n1.setVisible(false);
		n3.setVisible(false);
		n4.setVisible(false);
		n2.setVisible(false);
		n5.setVisible(false);
		n6.setVisible(false);
		n7.setVisible(false);
		n8.setVisible(false);
		n9.setVisible(false);
		n10.setVisible(false);
		n11.setVisible(false);
		n12.setVisible(false);
		n13.setVisible(false);
		n14.setVisible(false);
		n15.setVisible(false);
		n17.setVisible(false);
		n18.setVisible(false);
		n19.setVisible(false);
		n20.setVisible(false);
		n21.setVisible(false);
		n22.setVisible(false);

		pannelloMain.add(n);
		pannelloMain.add(n1);
		pannelloMain.add(n2);
		pannelloMain.add(n3);
		pannelloMain.add(n4);
		pannelloMain.add(n5);
		pannelloMain.add(n6);
		pannelloMain.add(n7);
		pannelloMain.add(aggiungiCliente);
		pannelloMain.add(n8);
		pannelloMain.add(cercaCliente);
		pannelloMain.add(n9);
		pannelloMain.add(cercaLibro);
		pannelloMain.add(n10);
		pannelloMain.add(aggiungiLibro);
		pannelloMain.add(n11);
		pannelloMain.add(n12);
		pannelloMain.add(prestitoCliente);
		pannelloMain.add(n13);
		pannelloMain.add(restituzioneCliente);
		pannelloMain.add(n14);
		pannelloMain.add(storico);
		pannelloMain.add(n15);
		pannelloMain.add(invioSegnalazione);
		pannelloMain.add(logOut);
		pannelloMain.add(n17);
		pannelloMain.add(n18);
		pannelloMain.add(n19);
		pannelloMain.add(n20);
		pannelloMain.add(n21);
		pannelloMain.add(help);
		pannelloMain.add(n22);

		// listener
		restituzioneCliente.addActionListener(listenerBottoni);
		prestitoCliente.addActionListener(listenerBottoni);
		logOut.addActionListener(listenerBottoni);
		aggiungiLibro.addActionListener(listenerBottoni);
		cercaLibro.addActionListener(listenerBottoni);
		cercaCliente.addActionListener(listenerBottoni);
		help.addActionListener(listenerBottoni);
		aggiungiCliente.addActionListener(listenerBottoni);
		storico.addActionListener(listenerBottoni);
		invioSegnalazione.addActionListener(listenerBottoni);

		KeyListenerView keylistener = new KeyListenerView();
		this.addKeyListener(keylistener);
		restituzioneCliente.addKeyListener(keylistener);
		prestitoCliente.addKeyListener(keylistener);
		logOut.addKeyListener(keylistener);
		aggiungiLibro.addKeyListener(keylistener);
		cercaLibro.addKeyListener(keylistener);
		cercaCliente.addKeyListener(keylistener);
		help.addKeyListener(keylistener);
		aggiungiCliente.addKeyListener(keylistener);
		storico.addKeyListener(keylistener);
		invioSegnalazione.addKeyListener(keylistener);

		// inserisco i testi sulle immagini

		restituzioneCliente.setToolTipText("Restituisci Libro");
		prestitoCliente.setToolTipText("Prendi un libro in prestito");
		logOut.setToolTipText("Esci");
		aggiungiLibro.setToolTipText("Aggiungi Libro");
		cercaLibro.setToolTipText("Cerca Libro");
		cercaCliente.setToolTipText("Cerca Cliente");
		help.setToolTipText("Help");
		aggiungiCliente.setToolTipText("Aggiungi Cliente");
		storico.setToolTipText("Statistiche Biblioteca");
		invioSegnalazione
				.setToolTipText("Avvisa i clienti ai quali sta per scadere il prestito");

		this.setVisible(true);
	}

	private void limiteCopieDaVisualizzare() {
		JPanel pannelloPrincipale = new JPanel2(sfondo.getImage());
		frameCopie = new JFrame("");

		frameCopie.setLayout(new GridLayout(2, 1));
		frameCopie.setMaximumSize(new Dimension(1366, 500));
		frameCopie.setSize(1326, 400);
		frameCopie.setResizable(false);
		frameCopie.setFocusable(true);
		frameCopie.setLocation(20, 20);
		frameCopie.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel(new GridLayout(1, 2));
		pannelloSecondario.setBackground(Color.RED);
		frameCopie.add(pannelloPrincipale);
		frameCopie.add(pannelloSecondario);
		listaNumLibri = new JComboBox<>();
		for (int i = 1; i < 11; i++)
			listaNumLibri.addItem(i);
		listaNumLibri.addActionListener(listenerBottoni);

		JLabel numeroCopie = new JLabel("Quanti libri vuoi visualizzare",
				JLabel.CENTER);
		numeroCopie.setFont(font1);

		pannelloSecondario.add(numeroCopie);
		pannelloSecondario.add(listaNumLibri);

		KeyListenerCopieDaVisualizzare listener = new KeyListenerCopieDaVisualizzare();
		frameCopie.addKeyListener(listener);
		listaNumLibri.addKeyListener(listener);
		frameCopie.setVisible(true);

	}

	private void apriFinestraAggiungiCliente() {

		String[] parametriInseriti = new String[3];

		parametriInseriti[0] = nomeAggiungiCliente.getText().trim();
		parametriInseriti[1] = cognomeAggiungiCliente.getText().trim();
		parametriInseriti[2] = emailAggiungiCliente.getText().trim();
		controller.aggiungiCliente(parametriInseriti);

	}

	private void apriFinestraAggiungiLibro() {

		String[] parametriInseriti = new String[8];
		parametriInseriti[0] = titoloAggiungiLibro.getText().trim();
		parametriInseriti[1] = autoreAggiungiLibro.getText().trim();
		parametriInseriti[2] = casaEditriceAggiungiLibro.getText().trim();
		parametriInseriti[3] = genereAggiungiLibro.getText().trim();
		parametriInseriti[4] = isbnAggiungiLibro.getText().trim();
		parametriInseriti[5] = urlCopertina.getText().trim();
		parametriInseriti[6] = numeroCopieAggiungiLibro.getText().trim();
		parametriInseriti[7] = scaffale.getText().trim();
		controller.aggiungiLibro(parametriInseriti);
	}

	private void apriChooser() {
		JFileChooser jfc = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"JPEG, JPG, GIF & PNG Images", "jpeg", "jpg", "gif", "png");
		jfc.setFileFilter(filter);
		if (jfc.showOpenDialog(frameAggiungiLibro) == JFileChooser.APPROVE_OPTION) {
			if (!jfc.getSelectedFile().exists()) {
				JOptionPane.showMessageDialog(null, "File inesistente!");
			} else {
				try {
					LibriImpl temp = new LibriImpl(conn);
					String origine = jfc.getSelectedFile().getAbsolutePath();
					// RandomImageName rim = new RandomImageName();
					StringBuilder sb = new StringBuilder("libri/");
					sb.append(temp.numLibri());
					sb.append(".jpg");
					@SuppressWarnings("unused")
					JImage ji = new JImage(origine, sb.toString());
					urlCopertina.setText(sb.toString());
				} catch (IOException e) {
					JOptionPane.showMessageDialog(null,
							"Errore di caricamento dell'immagine");
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null,
							"Problemi di collegamento al database");
				}
			}
		}
	}

	private void apriFinestraCercaLibro() {

		try {
			String[] parametriInseriti = new String[4];
			try {
				parametriInseriti[0] = titoloCercaLibro.getText().trim();

			} catch (NullPointerException n) {
				parametriInseriti[0] = "null";
			}
			try {
				parametriInseriti[1] = autoreCercaLibro.getText().trim();
			} catch (NullPointerException n) {
				parametriInseriti[1] = "null";
			}
			try {
				parametriInseriti[2] = genereCercaLibro.getText().trim();
			} catch (NullPointerException n) {
				parametriInseriti[2] = "null";
			}
			try {
				parametriInseriti[3] = casaEditriceCercaLibro.getText().trim();
			} catch (NullPointerException n) {
				parametriInseriti[3] = "null";
			}

			ResultSet res = controller.cercaLibro(parametriInseriti);
			JTable2 jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaCercaLibroCliente();
			jfCercaLibro = new JFrame("Cerca Libro");
			JScrollPane scroll = new JScrollPane(tabella);
			JPanel panelCercaLibro = new JPanel2(sfondo.getImage());
			panelCercaLibro.setLayout(new BorderLayout());
			jfCercaLibro.setSize(dimensioneUtente);
			jfCercaLibro.setVisible(true);
			jfCercaLibro.setFocusable(true);
			jfCercaLibro.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();
			panelCercaLibro.add(scroll, BorderLayout.CENTER);
			ImageIcon ii = new ImageIcon("immagini/indietro.png");
			indietroInCercaLibro = new JButton(ii);
			indietroInCercaLibro.addActionListener(listenerBottoni);
			panelCercaLibro.add(indietroInCercaLibro, BorderLayout.SOUTH);
			jfCercaLibro.addKeyListener(new KeyListener() {
				@Override
				public void keyTyped(KeyEvent e) {
				}

				@Override
				public void keyReleased(KeyEvent e) {
				}

				@Override
				public void keyPressed(KeyEvent e) {
					int key = e.getKeyCode();
					if (key == KeyEvent.VK_ESCAPE || key == KeyEvent.VK_ENTER) {
						jfCercaLibro.dispose();
					}
				}
			});

			jfCercaLibro.add(panelCercaLibro);
		} catch (SQLException q) {

		} catch (NullPointerException e) {

		}
	}

	private void apriFinestraCercaCliente() {

		try {
			String[] parametriInseriti = new String[4];
			try {
				parametriInseriti[0] = idCercaCliente.getText().trim();
				if (parametriInseriti[0] == "")
					parametriInseriti[0] = "null";

			} catch (NullPointerException n) {
				parametriInseriti[0] = "null";
			}
			try {
				parametriInseriti[1] = nomeCercaCliente.getText().trim();
				if (parametriInseriti[1] == "")
					parametriInseriti[1] = "null";
			} catch (NullPointerException n) {
				parametriInseriti[1] = "null";
			}
			try {
				parametriInseriti[2] = cognomeCercaCliente.getText().trim();
				if (parametriInseriti[2] == "")
					parametriInseriti[2] = "null";
			} catch (NullPointerException n) {
				parametriInseriti[2] = "null";
			}
			try {
				parametriInseriti[3] = emailCercaCliente.getText().trim();
				if (parametriInseriti[3] == "")
					parametriInseriti[3] = "null";
			} catch (NullPointerException n) {
				parametriInseriti[3] = "null";
			}

			ResultSet res = controller.cercaCliente(parametriInseriti);
			JTable2 jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaCercaCliente();
			jfCercaCliente = new JFrame("Cerca Cliente");
			JScrollPane scroll = new JScrollPane(tabella);
			JPanel panelCercaCliente = new JPanel2(sfondo.getImage());
			panelCercaCliente.setLayout(new BorderLayout());
			jfCercaCliente.setSize(dimensioneUtente);
			jfCercaCliente.setVisible(true);
			jfCercaCliente.setFocusable(true);
			jfCercaCliente.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
			ImageIcon ii = new ImageIcon("immagini/indietro.png");
			indietroInCercaCliente = new JButton(ii);
			indietroInCercaCliente.addActionListener(listenerBottoni);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();
			panelCercaCliente.add(scroll, BorderLayout.CENTER);

			panelCercaCliente.add(indietroInCercaCliente, BorderLayout.SOUTH);
			jfCercaCliente.addKeyListener(new KeyListener() {
				@Override
				public void keyTyped(KeyEvent e) {
				}

				@Override
				public void keyReleased(KeyEvent e) {
				}

				@Override
				public void keyPressed(KeyEvent e) {
					int key = e.getKeyCode();
					if (key == KeyEvent.VK_ESCAPE || key == KeyEvent.VK_ENTER) {
						jfCercaCliente.dispose();
					}
				}
			});
			jfCercaCliente.add(panelCercaCliente);
		} catch (NullPointerException e) {
			/*
			 * JOptionPane.showMessageDialog(null,
			 * "Non sono stati inseriti parametri", null,
			 * JOptionPane.ERROR_MESSAGE, erroreIm);
			 */
		} catch (SQLException e) {

			JOptionPane.showMessageDialog(null,
					"Parametri di ricerca non presenti");
		}
	}

	public void apriPiuPresi(int numCopie) {

		ResultSet res = controller.visualizzaPreferiti(numCopie);
		JTable2 jt2;
		try {
			jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaPreferiti(numCopie);
			JScrollPane scroll = new JScrollPane(tabella);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();

			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(scroll, BorderLayout.CENTER);
		} catch (SQLException e) {
			erroreStatisticaAdmin();
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriMenoDatati() {
		ResultSet res = controller.visualizzaStorico("inizioPrestito");
		JTable2 jt2;
		try {
			jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaVistaDalCliente();
			JScrollPane scroll = new JScrollPane(tabella);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();

			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(scroll, BorderLayout.CENTER);
		} catch (SQLException e) {
			erroreStatisticaAdmin();
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriStessaCasaEditrice() {
		ResultSet res = controller.visualizzaStorico(" casaEditrice ");
		JTable2 jt2;
		try {
			jt2 = new JTable2(res);

			JTable tabella = jt2.riempiTabellaVistaDalCliente();
			JScrollPane scroll = new JScrollPane(tabella);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(scroll, BorderLayout.CENTER);
		} catch (SQLException e) {
			erroreStatisticaAdmin();
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriStessoGenere() {
		ResultSet res = controller.visualizzaStorico(" genere ");
		JTable2 jt2;
		try {
			jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaVistaDalCliente();
			JScrollPane scroll = new JScrollPane(tabella);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(scroll, BorderLayout.CENTER);
		} catch (SQLException e) {

			erroreStatisticaAdmin();
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriStatisticaAnnuale() {
		try {
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(statistiche.adminGetStatisticaAnnuale(),
					BorderLayout.CENTER);
		} catch (SQLException sqe) {
			erroreStatisticaAdmin();
		} catch (IllegalArgumentException e) {
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriStatisticaMensile() {
		try {
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(statistiche.adminGetStatisticaMensile(),
					BorderLayout.CENTER);

		} catch (SQLException sqe) {
			erroreStatisticaAdmin();
		} catch (IllegalArgumentException e) {
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriStatisticaGeneri() {

		try {
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(statistiche.adminGetStatisticaGeneri(),
					BorderLayout.CENTER);
		} catch (SQLException sqe) {
			erroreStatisticaAdmin();
		} catch (IllegalArgumentException e) {
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriStorico() {

		// i componenti
		frameStoricoCliente = new JFrame("Storico Biblioteca");
		frameStoricoCliente.setLocation(centroAssi);
		frameStoricoCliente.setSize(new Dimension(1050, 650));
		frameStoricoCliente.setFocusable(true);
		frameStoricoCliente.setResizable(false);
		frameStoricoCliente.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		pannelloStatistiche = new JPanel2(sfondoNormale.getImage());
		pannelloStatistiche.setLayout(new BorderLayout());
		menuBar = new JMenuBar();
		statisticheDisponibili = new JMenu("Grafici:   ");
		visualizzaStorico = new JMenu("   Oridina i prestiti  per:   ");
		menuHelp = new JMenuItem("  Help");
		menuIndietro = new JMenuItem("  Indietro");
		menuClientiInRitardo = new JMenuItem(" Clienti da Multare");
		statisticaAnnuale = new JMenuItem("   Annuale   ");
		statisticaMensile = new JMenuItem("   Mensile   ");
		statisticaGeneriPreferiti = new JMenuItem("   Generi   ");
		piuDatati = new JMenuItem("Meno datati");
		menoDatati = new JMenuItem("Piu' datati");
		stessoGenere = new JMenuItem("Genere");
		stessaCasaEditrice = new JMenuItem("Casa Editrice");
		// itemPiuPresi = new JMenuItem("Piu' letti");

		// aggiungo i componenti
		frameStoricoCliente.add(pannelloStatistiche);
		frameStoricoCliente.add(menuBar, BorderLayout.SOUTH);
		statisticheDisponibili.add(statisticaAnnuale);
		statisticheDisponibili.addSeparator();
		statisticheDisponibili.add(statisticaMensile);
		statisticheDisponibili.addSeparator();
		statisticheDisponibili.add(statisticaGeneriPreferiti);
		visualizzaStorico.add(menoDatati);
		visualizzaStorico.addSeparator();
		visualizzaStorico.add(piuDatati);
		visualizzaStorico.addSeparator();
		visualizzaStorico.add(stessoGenere);
		visualizzaStorico.addSeparator();
		visualizzaStorico.add(stessaCasaEditrice);
		visualizzaStorico.addSeparator();
		// visualizzaStorico.add(itemPiuPresi);
		menuBar.add(statisticheDisponibili);
		menuBar.add(visualizzaStorico);
		menuBar.add(menuClientiInRitardo);
		menuBar.add(menuHelp);
		menuBar.add(menuIndietro);

		// le .set(...)

		statisticheDisponibili.setBackground(Color.yellow);
		visualizzaStorico.setBackground(Color.red);
		menuHelp.setBackground(Color.green);
		menuIndietro.setBackground(Color.cyan);
		menoDatati.setBackground(Color.red);
		piuDatati.setBackground(Color.red);
		stessoGenere.setBackground(Color.red);
		stessaCasaEditrice.setBackground(Color.red);
		statisticaAnnuale.setBackground(Color.yellow);
		statisticaAnnuale.setBackground(Color.yellow);
		statisticaGeneriPreferiti.setBackground(Color.yellow);
		statisticaAnnuale
				.setToolTipText("Statistiche annuali della Biblioteca");
		statisticaMensile
				.setToolTipText("Statistiche mensili della Biblioteca");
		statisticaGeneriPreferiti
				.setToolTipText("Generi preferiti dai clienti");
		menoDatati.setToolTipText("Libri presi meno recentemente");
		piuDatati.setToolTipText("Libri presi piu' recentemente ");
		stessoGenere
				.setToolTipText("Libri ordinati alfabeticamente rispetto al genere ");
		stessaCasaEditrice
				.setToolTipText("Libri ordinati alfabeticamente rispetto alla casa Editrice ");
		menuHelp.setToolTipText("Cerchi aiuto?");
		menuIndietro.setToolTipText("Vai alla tua Home");

		// aggiungo il listener
		statisticaAnnuale.addActionListener(listenerBottoni);
		statisticaMensile.addActionListener(listenerBottoni);
		statisticaGeneriPreferiti.addActionListener(listenerBottoni);
		menuHelp.addActionListener(listenerBottoni);
		menuIndietro.addActionListener(listenerBottoni);
		piuDatati.addActionListener(listenerBottoni);
		menoDatati.addActionListener(listenerBottoni);
		stessoGenere.addActionListener(listenerBottoni);
		stessaCasaEditrice.addActionListener(listenerBottoni);
		// itemPiuPresi.addActionListener(listenerBottoni);
		menuClientiInRitardo.addActionListener(listenerBottoni);

		KeyListenerStatistiche keyListener = new KeyListenerStatistiche();
		frameStoricoCliente.addKeyListener(keyListener);
		statisticaAnnuale.addKeyListener(keyListener);
		statisticaMensile.addKeyListener(keyListener);
		statisticaGeneriPreferiti.addKeyListener(keyListener);
		menuHelp.addKeyListener(keyListener);
		menuIndietro.addKeyListener(keyListener);
		piuDatati.addKeyListener(keyListener);
		menoDatati.addKeyListener(keyListener);
		stessoGenere.addKeyListener(keyListener);
		stessaCasaEditrice.addKeyListener(keyListener);
		// itemPiuPresi.addKeyListener(keyListener);
		menuClientiInRitardo.addKeyListener(keyListener);

		frameStoricoCliente.setVisible(true);

	}

	private void apriPiuDatati() {
		JTable2 jt2;
		try {
			ResultSet res = controller.visualizzaStorico("inizioPrestito DESC");
			jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaVistaDalCliente();
			JScrollPane scroll = new JScrollPane(tabella);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(scroll, BorderLayout.CENTER);
		} catch (SQLException e) {
			erroreStatisticaAdmin();
		}
		aggiornaPannelloStatisticheAdmin();
	}

	private void apriAggiungiCliente() {
		JPanel pannelloPrincipale = new JPanel2(sfondoNormale.getImage());
		frameAggiungiCliente = new JFrame("Aggiungi Cliente");
		frameAggiungiCliente.setSize(1050, 500);
		frameAggiungiCliente.setResizable(false);
		frameAggiungiCliente.setLocation(centroAssi2);
		frameAggiungiCliente.setLayout(new GridLayout(2, 1));
		frameAggiungiCliente.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel(new GridLayout(4, 2));
		pannelloSecondario.setBackground(Color.RED);
		frameAggiungiCliente.add(pannelloPrincipale);
		frameAggiungiCliente.add(pannelloSecondario);

		JLabel nome = new JLabel("Nome", JLabel.CENTER);
		nome.setFont(font1);
		nomeAggiungiCliente = new JTextField();
		JLabel cognome = new JLabel("Cognome", JLabel.CENTER);
		cognome.setFont(font1);
		cognomeAggiungiCliente = new JTextField();
		JLabel email = new JLabel("Email", JLabel.CENTER);
		email.setFont(font1);
		emailAggiungiCliente = new JTextField();
		ImageIcon indietro = new ImageIcon("immagini/indietro.png");
		ImageIcon avanti = new ImageIcon("immagini/conferma.png");

		avantiAggiungiCliente = new JButton(avanti);
		indietroAggiungiCliente = new JButton(indietro);
		pannelloSecondario.add(nome);
		pannelloSecondario.add(nomeAggiungiCliente);
		pannelloSecondario.add(cognome);
		pannelloSecondario.add(cognomeAggiungiCliente);
		pannelloSecondario.add(email);
		pannelloSecondario.add(emailAggiungiCliente);

		pannelloSecondario.add(indietroAggiungiCliente);
		pannelloSecondario.add(avantiAggiungiCliente);
		avantiAggiungiCliente.addActionListener(listenerBottoni);
		indietroAggiungiCliente.addActionListener(listenerBottoni);
		KeyListenerAggiungiCliente keyListener = new KeyListenerAggiungiCliente();
		nomeAggiungiCliente.addKeyListener(keyListener);
		cognomeAggiungiCliente.addKeyListener(keyListener);
		emailAggiungiCliente.addKeyListener(keyListener);
		avantiAggiungiCliente.addKeyListener(keyListener);
		indietroAggiungiCliente.addKeyListener(keyListener);

		frameAggiungiCliente.setVisible(true);
	}

	private void apriClientiInRitardo() {
		ResultSet res = controller.visualizzaClientiInRitardo();
		JTable2 jt2;
		try {
			jt2 = new JTable2(res);
			JTable tabella = jt2.riempiTabellaClienteScadenza();
			JScrollPane scroll = new JScrollPane(tabella);
			scroll.createHorizontalScrollBar();
			scroll.createVerticalScrollBar();
			pannelloStatistiche.removeAll();
			pannelloStatistiche.add(scroll, BorderLayout.CENTER);
		} catch (SQLException e) {
			e.printStackTrace();
			erroreStatisticaAdmin();
		} catch (NullPointerException n) {
			erroreStatisticaAdmin();
		}
		aggiornaPannelloStatisticheAdmin();
	}

	// dobbiamo entrare nello storico dopo
	public void apriCercaCliente() {
		JPanel pannelloPrincipale = new JPanel2(sfondoNormale.getImage());
		frameCercaCliente = new JFrame("Cerca Cliente");
		frameCercaCliente.setSize(new Dimension(1050, 700));
		frameCercaCliente.setLocation(centroAssi2);
		frameCercaCliente.setResizable(false);
		frameCercaCliente.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel();
		frameCercaCliente.add(pannelloPrincipale);
		frameCercaCliente.add(pannelloSecondario);
		pannelloSecondario.setBackground(Color.RED);
		frameCercaCliente.setLayout(new GridLayout(2, 1));
		pannelloSecondario.setLayout(new GridLayout(3, 4, 20, 50));
		JLabel idCliente = new JLabel("ID Cliente", JLabel.CENTER);
		idCliente.setFont(font1);
		idCercaCliente = new JTextField();
		JLabel nome = new JLabel("Nome", JLabel.CENTER);
		nome.setFont(font1);
		nomeCercaCliente = new JTextField();
		JLabel cognome = new JLabel("Cognome", JLabel.CENTER);
		cognome.setFont(font1);
		cognomeCercaCliente = new JTextField();
		JLabel email = new JLabel("Email", JLabel.CENTER);
		email.setFont(font1);
		ImageIcon indietro = new ImageIcon("immagini/indietro.png");
		ImageIcon avanti = new ImageIcon("immagini/conferma.png");
		emailCercaCliente = new JTextField();
		avantiCercaCliente = new JButton(avanti);
		indietroCercaCliente = new JButton(indietro);
		JButton n = new JButton();
		JButton n1 = new JButton();
		pannelloSecondario.add(idCliente);
		pannelloSecondario.add(idCercaCliente);
		pannelloSecondario.add(nome);
		pannelloSecondario.add(nomeCercaCliente);
		pannelloSecondario.add(cognome);
		pannelloSecondario.add(cognomeCercaCliente);
		pannelloSecondario.add(email);
		pannelloSecondario.add(emailCercaCliente);
		pannelloSecondario.add(indietroCercaCliente);
		pannelloSecondario.add(n);
		pannelloSecondario.add(n1);
		pannelloSecondario.add(avantiCercaCliente);
		n.setVisible(false);
		n1.setVisible(false);

		indietroCercaCliente.addActionListener(listenerBottoni);
		avantiCercaCliente.addActionListener(listenerBottoni);

		KeyListenerCercaCliente keylistener = new KeyListenerCercaCliente();
		idCercaCliente.addKeyListener(keylistener);
		nomeCercaCliente.addKeyListener(keylistener);
		cognomeCercaCliente.addKeyListener(keylistener);
		emailCercaCliente.addKeyListener(keylistener);
		indietroCercaCliente.addKeyListener(keylistener);
		avantiCercaCliente.addKeyListener(keylistener);

		frameCercaCliente.setVisible(true);
	}

	private void apriRestituzioneLibro() {
		JPanel2 pannelloPrincipale = new JPanel2(sfondoNormale.getImage());
		frameRestituzione = new JFrame("Restituisci Libro");
		frameRestituzione.setSize(new Dimension(1050, 700));
		frameRestituzione.setLocation(centroAssi2);
		frameRestituzione.setResizable(false);
		frameRestituzione.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel();
		frameRestituzione.add(pannelloPrincipale);
		frameRestituzione.add(pannelloSecondario);
		pannelloSecondario.setBackground(Color.RED);
		frameRestituzione.setLayout(new GridLayout(2, 1));
		pannelloSecondario.setLayout(new GridLayout(3, 3, 10, 10));
		JLabel idCliente = new JLabel("ID Cliente", JLabel.CENTER);
		idCliente.setFont(font1);
		idRestituzione = new JTextField();
		JLabel isbn = new JLabel("ISBN", JLabel.CENTER);
		isbn.setFont(font1);
		isbnRestituzione = new JTextField();
		ImageIcon indietro = new ImageIcon("immagini/indietro.png");
		ImageIcon avanti = new ImageIcon("immagini/conferma.png");
		avantiRestituzione = new JButton(avanti);
		indietroRestituzione = new JButton(indietro);
		pannelloSecondario.add(idCliente);
		pannelloSecondario.add(idRestituzione);
		pannelloSecondario.add(isbn);
		pannelloSecondario.add(isbnRestituzione);
		pannelloSecondario.add(indietroRestituzione);
		pannelloSecondario.add(avantiRestituzione);

		indietroRestituzione.addActionListener(listenerBottoni);
		avantiRestituzione.addActionListener(listenerBottoni);

		KeyListenerRestituisciLibro keylistener = new KeyListenerRestituisciLibro();
		idRestituzione.addKeyListener(keylistener);
		isbnRestituzione.addKeyListener(keylistener);
		indietroRestituzione.addKeyListener(keylistener);
		avantiRestituzione.addKeyListener(keylistener);

		frameRestituzione.setVisible(true);
	}

	private void apriPrestitoCliente() {
		JPanel2 pannelloPrincipale = new JPanel2(sfondoNormale.getImage());
		framePrestito = new JFrame("Prestito Libro");
		framePrestito.setSize(new Dimension(1050, 700));
		framePrestito.setLocation(centroAssi2);
		framePrestito.setResizable(false);
		framePrestito.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel();
		framePrestito.add(pannelloPrincipale);
		framePrestito.add(pannelloSecondario);
		pannelloSecondario.setBackground(Color.RED);
		framePrestito.setLayout(new GridLayout(2, 1));
		pannelloSecondario.setLayout(new GridLayout(3, 3, 10, 10));
		JLabel idCliente = new JLabel("ID Cliente", JLabel.CENTER);
		idCliente.setFont(font1);
		idPrestito = new JTextField();
		JLabel isbn = new JLabel("ISBN", JLabel.CENTER);
		isbn.setFont(font1);
		isbnPrestito = new JTextField();
		ImageIcon indietro = new ImageIcon("immagini/indietro.png");
		ImageIcon avanti = new ImageIcon("immagini/conferma.png");
		avantiPrestito = new JButton(avanti);
		indietroPrestito = new JButton(indietro);
		pannelloSecondario.add(idCliente);
		pannelloSecondario.add(idPrestito);
		pannelloSecondario.add(isbn);
		pannelloSecondario.add(isbnPrestito);

		pannelloSecondario.add(indietroPrestito);
		pannelloSecondario.add(avantiPrestito);
		indietroPrestito.addActionListener(listenerBottoni);
		avantiPrestito.addActionListener(listenerBottoni);

		KeyListenerPrestitoLibro keylistener = new KeyListenerPrestitoLibro();
		idPrestito.addKeyListener(keylistener);
		isbnPrestito.addKeyListener(keylistener);
		indietroPrestito.addKeyListener(keylistener);
		avantiPrestito.addKeyListener(keylistener);

		framePrestito.setVisible(true);
	}

	private void apriAggiungiLibro() {
		JPanel pannelloPrincipale = new JPanel2(sfondoNormale.getImage());
		frameAggiungiLibro = new JFrame("Aggiungi Libro");
		frameAggiungiLibro.setSize(new Dimension(1050, 700));
		frameAggiungiLibro.setLayout(new GridLayout(2, 1));
		frameAggiungiLibro.setLocation(centroAssi2);
		frameAggiungiLibro.setResizable(false);
		frameAggiungiLibro.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel(new GridLayout(5, 4, 5, 5));
		pannelloSecondario.setBackground(Color.RED);
		frameAggiungiLibro.add(pannelloPrincipale);
		frameAggiungiLibro.add(pannelloSecondario);
		JLabel titolo = new JLabel("Titolo", JLabel.CENTER);
		titolo.setFont(font1);
		titoloAggiungiLibro = new JTextField();
		titoloAggiungiLibro.setSize(new Dimension(200, 200));
		JLabel autore = new JLabel("Autore", JLabel.CENTER);
		autore.setFont(font1);
		autoreAggiungiLibro = new JTextField();
		JLabel genere = new JLabel("Genere", JLabel.CENTER);
		genere.setFont(font1);
		JLabel casaEditrice = new JLabel("Casa Editrice", JLabel.CENTER);
		casaEditrice.setFont(font1);
		casaEditriceAggiungiLibro = new JTextField();
		JLabel posizioneScaffale = new JLabel("Scaffale", JLabel.CENTER);
		posizioneScaffale.setFont(font1);
		genereAggiungiLibro = new JTextField();
		scaffale = new JTextField();
		JLabel numeroCopie = new JLabel("Numero Copie", JLabel.CENTER);
		numeroCopie.setFont(font1);
		numeroCopieAggiungiLibro = new JTextField();
		JLabel isbn = new JLabel("ISBN", JLabel.CENTER);
		isbn.setFont(font1);
		isbnAggiungiLibro = new JTextField();
		ImageIcon indietro = new ImageIcon("immagini/indietro.png");
		ImageIcon avanti = new ImageIcon("immagini/conferma.png");
		avantiAggiungiLibro = new JButton(avanti);
		avantiAggiungiLibro.setBackground(Color.WHITE);

		indietroAggiungiLibro = new JButton(indietro);
		indietroAggiungiLibro.setBackground(Color.WHITE);
		JLabel copertina = new JLabel("URL Copertina", JLabel.CENTER);
		copertina.setFont(font1);
		aggiungiCopertinaLibro = new JButton("Aggiungi Copertina");
		urlCopertina = new JTextField();
		JButton n2 = new JButton();
		JButton n3 = new JButton();
		pannelloSecondario.add(titolo);
		pannelloSecondario.add(titoloAggiungiLibro);
		pannelloSecondario.add(autore);
		pannelloSecondario.add(autoreAggiungiLibro);
		pannelloSecondario.add(genere);
		pannelloSecondario.add(genereAggiungiLibro);
		pannelloSecondario.add(casaEditrice);
		pannelloSecondario.add(casaEditriceAggiungiLibro);
		pannelloSecondario.add(isbn);
		pannelloSecondario.add(isbnAggiungiLibro);
		pannelloSecondario.add(posizioneScaffale);
		pannelloSecondario.add(scaffale);
		pannelloSecondario.add(numeroCopie);
		pannelloSecondario.add(numeroCopieAggiungiLibro);
		pannelloSecondario.add(copertina);
		pannelloSecondario.add(urlCopertina);
		pannelloSecondario.add(indietroAggiungiLibro);
		pannelloSecondario.add(n2);
		pannelloSecondario.add(n3);
		pannelloSecondario.add(avantiAggiungiLibro);
		n2.setVisible(false);
		n3.setVisible(false);

		avantiAggiungiLibro.addActionListener(listenerBottoni);
		indietroAggiungiLibro.addActionListener(listenerBottoni);
		// aggiungiCopertinaLibro.addActionListener(listenerBottoni);

		KeyListenerAggiungiLibro keylistener = new KeyListenerAggiungiLibro();
		titoloAggiungiLibro.addKeyListener(keylistener);
		autoreAggiungiLibro.addKeyListener(keylistener);
		genereAggiungiLibro.addKeyListener(keylistener);
		casaEditriceAggiungiLibro.addKeyListener(keylistener);
		isbnAggiungiLibro.addKeyListener(keylistener);
		scaffale.addKeyListener(keylistener);
		numeroCopieAggiungiLibro.addKeyListener(keylistener);
		urlCopertina.addKeyListener(keylistener);
		indietroAggiungiLibro.addKeyListener(keylistener);
		avantiAggiungiLibro.addKeyListener(keylistener);

		frameAggiungiLibro.setVisible(true);
	}

	private void apriCercaLibro() {
		JPanel pannelloPrincipale = new JPanel2(sfondoNormale.getImage());
		frameCercaLibro = new JFrame("Cerca Libro");
		frameCercaLibro.setSize(new Dimension(1050, 700));
		frameCercaLibro.setLayout(new GridLayout(2, 1));
		frameCercaLibro.setResizable(false);
		frameCercaLibro.setLocation(centroAssi2);
		frameCercaLibro.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		JPanel pannelloSecondario = new JPanel(new GridLayout(3, 4, 15, 40));
		pannelloSecondario.setBackground(Color.RED);
		frameCercaLibro.add(pannelloPrincipale);
		frameCercaLibro.add(pannelloSecondario);
		JLabel titolo = new JLabel("Titolo", JLabel.CENTER);
		titolo.setFont(font1);
		titoloCercaLibro = new JTextField();
		JLabel autore = new JLabel("Autore", JLabel.CENTER);
		autore.setFont(font1);
		autoreCercaLibro = new JTextField();
		JLabel genere = new JLabel("Genere", JLabel.CENTER);
		genere.setFont(font1);
		genereCercaLibro = new JTextField();
		JLabel casaEditrice = new JLabel("Casa editrice", JLabel.CENTER);
		casaEditrice.setFont(font1);
		casaEditriceCercaLibro = new JTextField();
		ImageIcon indietro = new ImageIcon("immagini/indietro.png");
		ImageIcon avanti = new ImageIcon("immagini/conferma.png");
		indietroCercaLibro = new JButton(indietro);

		avantiCercaLibro = new JButton(avanti);
		JButton n = new JButton();
		JButton n1 = new JButton();
		pannelloSecondario.add(titolo);
		pannelloSecondario.add(titoloCercaLibro);
		pannelloSecondario.add(autore);
		pannelloSecondario.add(autoreCercaLibro);
		pannelloSecondario.add(genere);
		pannelloSecondario.add(genereCercaLibro);
		pannelloSecondario.add(casaEditrice);
		pannelloSecondario.add(casaEditriceCercaLibro);
		pannelloSecondario.add(indietroCercaLibro);
		pannelloSecondario.add(n);
		pannelloSecondario.add(n1);
		pannelloSecondario.add(avantiCercaLibro);
		n.setVisible(false);
		n1.setVisible(false);

		// listener bottoni
		avantiCercaLibro.addActionListener(listenerBottoni);
		indietroCercaLibro.addActionListener(listenerBottoni);

		KeyListenerCercaLibro keylistener = new KeyListenerCercaLibro();
		titoloCercaLibro.addKeyListener(keylistener);
		autoreCercaLibro.addKeyListener(keylistener);
		genereCercaLibro.addKeyListener(keylistener);
		casaEditriceCercaLibro.addKeyListener(keylistener);
		indietroCercaLibro.addKeyListener(keylistener);
		avantiCercaLibro.addKeyListener(keylistener);

		frameCercaLibro.setVisible(true);
	}

	public void clienteInserito(int id, String nome, String cognome, String pass) {
		frameAggiungiCliente.dispose();
		clienteInserito = new JFrame("Cliente Inserito");
		clienteInserito.setLayout(new GridLayout(4, 2));
		clienteInserito.setSize(new Dimension(600, 500));
		clienteInserito.setPreferredSize(new Dimension(600, 500));
		clienteInserito.setLocation(centroAssi2);
		clienteInserito.setFocusable(true);
		clienteInserito.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

		JLabel idCliente = new JLabel("ID Cliente", JLabel.CENTER);
		idCliente.setFont(font1);
		String idReale = String.valueOf(id);

		JLabel idCliente1 = new JLabel(idReale, JLabel.CENTER);
		idCliente1.setFont(font2);

		idCliente.setFont(font1);
		JLabel nomeCliente = new JLabel("Nome ", JLabel.CENTER);
		nomeCliente.setFont(font1);
		JLabel cognomeCliente = new JLabel("Cognome", JLabel.CENTER);
		cognomeCliente.setFont(font1);
		JLabel passCliente = new JLabel("Password", JLabel.CENTER);
		passCliente.setFont(font1);
		JLabel nomeCliente1 = new JLabel(nome, JLabel.CENTER);
		nomeCliente1.setFont(font2);
		JLabel cognomeCliente1 = new JLabel(cognome, JLabel.CENTER);
		cognomeCliente1.setFont(font2);
		JLabel passCliente1 = new JLabel(pass, JLabel.CENTER);
		passCliente1.setFont(font2);
		clienteInserito.add(idCliente);
		clienteInserito.add(idCliente1);
		clienteInserito.add(nomeCliente);
		clienteInserito.add(nomeCliente1);
		clienteInserito.add(cognomeCliente);
		clienteInserito.add(cognomeCliente1);
		clienteInserito.add(passCliente);
		clienteInserito.add(passCliente1);

		clienteInserito.addKeyListener(new KeyListener() {
			@Override
			public void keyTyped(KeyEvent e) {
			}

			@Override
			public void keyReleased(KeyEvent e) {
			}

			@Override
			public void keyPressed(KeyEvent e) {
				int key = e.getKeyCode();
				if (key == KeyEvent.VK_ESCAPE || key == KeyEvent.VK_ENTER) {
					clienteInserito.dispose();
				}
			}
		});

		clienteInserito.setVisible(true);
	}

	private void aggiornaPannelloStatisticheAdmin() {
		pannelloStatistiche.repaint();
		pannelloStatistiche.validate();

	}

	// JOptionPane

	private void inviaSegnalazione() {
		int option = JOptionPane.showConfirmDialog(null,
				"Sicuro di voler inviare la segnalazione?",
				"Invia Segnalazione", JOptionPane.YES_NO_OPTION,
				JOptionPane.NO_OPTION, puntoInterrogativo);
		if (option == JOptionPane.YES_OPTION) {
			controller.inviaSegnalazione(5);
		}
	}

	public void libroNonInserito() {
		JOptionPane.showMessageDialog(null,
				"Libro non inserito.Esiste gia' un libro con lo stesso ISBN",
				null, JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void libroInserito() {
		JOptionPane.showMessageDialog(null, "Libro inserito correttamente",
				null, JOptionPane.ERROR_MESSAGE, okIm);
		this.setVisible(true);
		frameAggiungiLibro.dispose();
	}

	private void parametriScorretti() {
		JOptionPane.showMessageDialog(null, "Parametri scorretti o mancanti",
				null, JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void libroRestituito() {
		JOptionPane.showMessageDialog(null, "Libro restituito con successo",
				null, JOptionPane.ERROR_MESSAGE, okIm);
	}

	public void libroNonRestituito() {
		JOptionPane.showMessageDialog(null,
				"Il libro non appartiene a questo cliente", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void clienteNonInserito() {
		JOptionPane.showMessageDialog(null, "Cliente non inserito", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void libroPreso() {
		JOptionPane.showMessageDialog(null, "Libro preso con successo", null,
				JOptionPane.ERROR_MESSAGE, okIm);
		framePrestito.dispose();
	}

	public void libroNonPreso() {
		JOptionPane.showMessageDialog(null, "Libro non preso ", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void massimeCopieRaggiunte() {
		JOptionPane.showMessageDialog(null,
				"Raggiunto il numero massimo di copie", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void datiErrati() {
		JOptionPane.showMessageDialog(null, "Dati errati", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void NonPuoiPrendereLibro() {
		JOptionPane.showMessageDialog(null,
				"Libro gia' in possesso del cliente", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void libroClienteInesistente() {
		JOptionPane.showMessageDialog(null, "Libro o Cliente inesistente",
				null, JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void nonAppartiene() {
		JOptionPane.showMessageDialog(null,
				"Il libro non appartiene a questo cliente", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void erroreStatisticaAdmin() {
		JOptionPane.showMessageDialog(null, "Statistiche non disponibili",
				null, JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void inserireTuttiIParametri() {
		JOptionPane.showMessageDialog(null, "Inserire tutti i parametri", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);

	}

	public void inserireAlcuniParametri() {
		JOptionPane.showMessageDialog(null,
				"Inserire un parametro con lunghezza sufficiente", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);

	}

	public void togliRestituisci() {
		frameRestituzione.dispose();

	}

	public void togliPrestito() {
		framePrestito.dispose();

	}

	public void datiScorretti() {

		JOptionPane.showMessageDialog(null,
				"Controllare ISBN e numero copie.L'isbn e' un campo numerico ",
				null, JOptionPane.ERROR_MESSAGE, erroreIm);

	}

	public void libroTerminato() {
		JOptionPane.showMessageDialog(null, "Libro terminato", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);

	}

	public void numeroCopie() {
		JOptionPane.showMessageDialog(null,
				"Il numero di copie deve essere > 0 ", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);

	}

	public void mailSbagliata() {
		JOptionPane.showMessageDialog(null,
				"Hai inserito una email sbagliata ", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);

	}

	public void aggiornateNumCopie() {
		JOptionPane.showMessageDialog(null, "Numero copie aggiornate", null,
				JOptionPane.ERROR_MESSAGE, okIm);
		this.setVisible(true);
		frameAggiungiLibro.dispose();
	}

	public void togliCercaCliente() {
		frameCercaCliente.dispose();
	}

	public void togliCercaLibro() {
		frameCercaLibro.dispose();

	}

	public void togliAggiungiCliente() {

		frameAggiungiCliente.dispose();
	}

	public void erroreURL() {
		JOptionPane.showMessageDialog(null, "URL malformato", null,
				JOptionPane.ERROR_MESSAGE, erroreIm);
	}

	public void invioEmailOption() {
		ImageIcon erroreIm = new ImageIcon("immagini/messaggio.gif");
		JOptionPane
				.showMessageDialog(
						null,
						"Invio Email In Corso : Potrebbe richiedere alcuni secondi \n Premi OK",
						null, JOptionPane.INFORMATION_MESSAGE, erroreIm);
	}

}
